#include "BLUET.h"
#include <stdio.h>

void BLUET_Init(int baudrate)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;
	//1.配置GPIO
	//1.1 使能GPIO分组时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	//1.2 初始化GPIO
	
	GPIO_InitStructure.GPIO_Mode		= GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Pin		= GPIO_Pin_10;
	GPIO_InitStructure.GPIO_Speed	= GPIO_Speed_50MHz;// 50MHz
	GPIO_Init(GPIOB,&GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin		= GPIO_Pin_11;
	GPIO_InitStructure.GPIO_Mode   = GPIO_Mode_IN_FLOATING;
	GPIO_Init(GPIOB,&GPIO_InitStructure);

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);

	
	USART_InitStructure.USART_BaudRate			= baudrate;
	USART_InitStructure.USART_HardwareFlowControl	= USART_HardwareFlowControl_None;	//不采用硬件流控
	USART_InitStructure.USART_Mode				= USART_Mode_Tx | USART_Mode_Rx;	//收发模式
	USART_InitStructure.USART_Parity				= USART_Parity_No;					//不采用校验位
	USART_InitStructure.USART_StopBits			= USART_StopBits_1;					//停止位1位
	USART_InitStructure.USART_WordLength			= USART_WordLength_8b;				//8bit数据位+0bit校验位
	USART_Init(USART3,&USART_InitStructure);
	
	//3.配置中断
	//3.1 指定引发串口中断的事件
	USART_ITConfig(USART3,USART_IT_TXE,ENABLE);		//当RXNE被设置将引发串口中断

	//3.2 配置NVIC
	
//	n.NVIC_IRQChannel			= USART2_IRQn;			//中断编号
//	n.NVIC_IRQChannelCmd		= ENABLE;
//	n.NVIC_IRQChannelPreemptionPriority	= 2;
//	n.NVIC_IRQChannelSubPriority	 	= 2;
//	NVIC_Init(&n);

	//4.使能串口
	USART_Cmd(USART3,ENABLE);
	

}

void Usart3_SendDatas( float angle, float weight)
{
    char str[50];  // 用于存储转换后的字符串
    int i;

    // 将角度和重量以小数形式格式化到字符串中
    sprintf(str, "%.0f       %.1f\n", angle, weight);

    i = 0;
    while (str[i] != '\0')
    {
        while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);  // 等待 TDR 为空
        USART_SendData(USART3, str[i]);  // 发送字符
        i++;
    }
}

//void Usart2_SendDatas(u32 *data, s32 len)
//{
//    char str[20];  // 用于存储转换后的字符串
//    int i, j;

//    for (i = 0; i < len; i++)
//    {
//        sprintf(str, "%u", data[i]);  // 将 u32 类型的数据转换为字符串
//        j = 0;
//        while (str[j] != '\0')
//        {
//            while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);  // 等待 TDR 为空
//            USART_SendData(USART2, str[j]);  // 发送字符
//            j++;
//        }
//        // 发送分隔符，方便接收端区分不同的数据
//        while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
//        USART_SendData(USART2, ',');  
//    }
//    // 发送换行符，表示一次数据发送结束
//    while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
//    USART_SendData(USART2, '\n');  
//}

//void Usart2_SendDatas(u32 *data,s32 len)
//{	
//	int i;
//	for(i = 0;i < len;i++)
//	{
//		while(USART_GetFlagStatus(USART2,USART_FLAG_TXE) == RESET);//等待TDR为空
//		USART_SendData(USART2,data[i]);
//	}
//}

//void Usart2_SendDatas(u32 *data,s32 len)
//{
//    int i, j;
//    for(i = 0; i < len; i++)
//    {
//        for(j = 3; j >= 0; j--)
//        {
//            while(USART_GetFlagStatus(USART2,USART_FLAG_TXE) == RESET); //等待TDR为空
//            USART_SendData(USART2, (data[i] >> (j * 8)) & 0xFF); //将32位数据拆分成4个8位数据依次发送
//        }
//    }
//}

//void USART2_IRQHandler(void)
//{
//	//有多个事件(TXE,TC,RXNE..)都可以引发串口中断
//	//所以，在串口中断处理函数中一般要判断是什么事件引发的串口中断

//	if(USART_GetITStatus(USART2,USART_IT_TXE) == SET)//意味着是因为RDR不为空引发的中断
//	{
//		//用户处理：去接收数据
//		USART_SendData(USART2,air_tem);
//		USART_SendData(USART2,air_hum);
//		USART_SendData(USART2,light);
//		//清除中断标志位
//		USART_ClearITPendingBit(USART2,USART_IT_RXNE);
//	}

//}


